\documentclass[12pt]{article}

%------------------------- Carga de paquetes ---------------------------
%
% Si no necesit\'as alg\'un paquete, comentalo.
%

%
% Definici\'on del tama?o de p\'agina y los m\'argenes:
%
\usepackage[a4paper,headheight=16pt,scale={0.7,0.75},hoffset=0.5cm,voffset=0.5cm]{geometry}

\usepackage{fancyhdr}
%
% Vamos a escribir en castellano:
%
\usepackage[spanish]{babel}
\usepackage[latin1]{inputenc}

%
% Si prefer\'is el tipo de letra Helvetica (Arial), descoment\'a las siguientes
% dos lineas (las f\'ormulas seguir\'an estando en Times):
%
%\usepackage[scaled=0.9]{helvet}
%\renewcommand\familydefault{\sfdefault}

%
% El paquete amsmath agrega algunas funcionalidades extra a las f\'ormulas. 
% Adem\'as defino la numeraci\'on de las tablas y figuras al estilo "Figura 2.3", 
% en lugar de "Figura 7". (Por lo tanto, aunque no uses f\'ormulas, si quer\'es
% este tipo de numeraci\'on dej\'a el paquete amsmath descomentado).
%
\usepackage{amsmath}
\numberwithin{equation}{section}
\numberwithin{figure}{section}
\numberwithin{table}{section}
\usepackage{amssymb}

%
% Para tener cabecera y pie de p\'agina con un estilo personalizado:
%
\usepackage{fancyhdr}

%
% Para poner el texto "Figura X" en negrita:
% (Si no ten\'es el paquete 'caption2', prob\'a con 'caption').
%
\usepackage[hang,bf]{caption2}

%
% Para poder usar subfiguras: (al estilo Figura 2.3(b) )
%
\usepackage{subfigure}

%
% Para poder agregar notas al pie en tablas:
%
%\usepackage{threeparttable}

%
% Para que ponga "Tabla" en lugar de "Cuadro":
%
\addto\captionsspanish{\def\tablename{Tabla}}

%
% Para incluir c\'odigo fuente:
%
\usepackage{moreverb}
\usepackage{listings}
%
% Para tener secciones con interlineado controlable:
%
\usepackage{setspace}

%------------------------------ graphicx ----------------------------------
%
% Para incluir im\'agenes, el siguiente c\'odigo carga el paquete graphicx 
% seg\'un se est\'e generando un archivo dvi o un pdf (con pdflatex). 
%

\newif\ifpdf
\ifx\pdfoutput\undefined
	\pdffalse
\else
	\pdfoutput=1
	\pdftrue
\fi

\ifpdf
	\usepackage[pdftex]{graphicx}
	\pdfcompresslevel=9
\else
	\usepackage[dvips]{graphicx}
\fi

\usepackage{epsfig}

%Directorio de imagenes
\newcommand{\imgdir}{images}
\graphicspath{{\imgdir/}}

%------------------------- Inicio del documento ---------------------------

\usepackage{url}
\usepackage{caratula}

\pagestyle{fancy}

\materia{66.71 Sistemas Gr\'aficos}
\submateria{Segundo Cuatrimestre de 2008}
\titulo{Tr\'abajo Pr\'actico N\'umero 2}
\integrante{Malchinsky, Diego}{85373}{d\_malcha@hotmail.com}
\integrante{Keena, Hern\'an}{84471}{hpk2987@yahoo.com.ar}

\begin{document}

%
% Hago que en la cabecera de p\'agina se muestre a la derecha la secci\'on,
% y en el pie, en n\'umero de p\'agina a la derecha:
%
\pagestyle{fancy}
\renewcommand{\sectionmark}[1]{\markboth{}{\thesection\ \ #1}}
\lhead{}
\chead{}
\rhead{\rightmark}
\lfoot{}
\cfoot{}
\rfoot{\thepage}

\maketitle

%
% Pongo el \'indice en una p\'agina aparte:
%
%\tableofcontents
%\newpage

%
% Inicio del TP:
%

\fancyfoot[LO]{ \footnotesize{Trabajo Pr\'actico Nro1 \\ Fecha Entrega 26/09/2008 - Cuatrimestre 2do 2008 \\ Malchinsky,Diego 85373 Keena,Hern\'an Pablo 84471} }
%\fancyfoot[CO]{}
%\fancyfoot[RO]{\thepage\ de \pageref{LastPage}}

%\footnote{Trabajo Pr\'actico: Nro. 2	Cuatrimestre: 2do 2008	
%		  Integrantes: Malchinsky, Diego 85373;Keena,Hern\'an Pablo 84471	Fecha Entrega:7/10/2008}.

\section{Arquitectura}

\subsection{Aplicaci\'on:}
La arquitectura de la aplicaci\'on se basa en el patr\'on Model-View-Controller.\\
Cada Viewport existente tiene su propio vista,modelo y controlador( seg\'un representa un perfil
de altura , posici\'on o la vista en perspectiva 3d ). De esta manera puede usarse el
sistema de propagaci\'on de mensajes que permite este patr\'on actualizando todas las vistas
que as\'i lo necesiten cuando de modifica una en particular.

\section{Dise\~no}

\subsection{Clase Scene:}
Act\'ua como controlador general que agrupa a los dem\'as controladores. Es el encargado de
reenviar los eventos recibidos desde el framework hacia el controlador o controladores correspondientes.
Ademas adapta las coordenadas de los eventos que env\'ia el framework al sistema de
coordenadas del viewport o viewports( eventos de mouse ) que corresponda dado que este
las env\'ia relativas al sistema de coordenadas de la pantalla.

\subsection{Perfil de altura(Bezier cubica):}
A trav\'es de esta vista el usuario tiene la posibilidad de seleccionar las altura finales que desea
en cada tramo, los puntos restantes ser\'an autom\'aticamente calculados para que las tangentes
coincidan en cada tramo y as\'i poder obtener una curva suave. Solamente indica la altura inicial en el primer punto.
Los puntos de control agregados autom\'aticamente son ubicados horizontalmente respecto al 
punto donde el usuario decidi\'o fijar el final del tramo, esto permite que la curva comience 
a dibujarse a partir del segundo punto insertado lo que permite una mas f\'acil visualizaci\'on del perfil de altura resultante.\\
El controlador del perfil de altura permite cerrar la curva autom\'aticamente nivelando 
la altura final a la altura inicial de la curva. Esto puede generar la inserci\'on o no de 4 puntos de control dependiendo 
si la curva estaba ya nivelada o no. Ademas permite arrastrar los puntos de control de la misma por lo tanto pueden 
modificarse las tangentes calculadas autom\'aticamente, aun as\'i existe la limitaci\'on de que un punto de control no pueda
insertarse o desplazarse de manera tal que la curva retroceda dejando de ser una funci\'on de u.
Otra limitaci\'on es que no se puede dibujar puntos por abajo del nivel del "piso" (Z=0),
este mismo es configurable.

\subsection{Curva de posici\'on(BSpline cubica):}
El controlador del perfil de posici\'on permite cerrar la curva autom\'aticamente agregando el punto 
reflejado del 2do punto respecto del primero ( para que coincidan la tangente inicial con la final, y as\'i
obtener una curva suave) y ademas el primer, segundo y tercer punto para  as\'i obtener
un curva cerrada.
Puede configurarse donde desea ubicarse el punto de referencia XY=(0,0).

\subsection{Perspectiva (3D):}
Para calcular el Punto (x,y,z) de la curva en perspectiva se itera a trav\'es de todos los puntos
pre calculados de la B-Spline y dado que su step es un valor conocido puede  determinarse 
cuanto vale en cada momento el par\'ametro \textit{u} de la curva. Conociendo este valor es necesario
encontrar el valor del par\'ametro \textit{w} de la Bezier que se relacione con el \textit{u} para saber el z asociado.
La relaci\'on de los par\'ametros se encuentra dada por la raz\'on de la cantidad de  segmentos
que tiene cada curva. Por lo tanto multiplicando el \textit{u} por este factor se obtiene el \textit{w} asociado, el cual es \'unico
ya que la Bezier es no multivaluada respecto de \textit{u}.

\subsection{Controles:}
\begin{itemize}
	\item W Realiza zoom in.
	\item S Realiza zoom out.
	\item A Realiza rotaci\'on negativa en el plano XY.
	\item D Realiza rotaci\'on positiva en el plano XY.
	\item Q Realiza rotaci\'on hacia abajo.
	\item E Realiza rotaci\'on hacia arriba.
	\item C Cierra las curvas (Bezier y B-spline).
	\item B Construye la curva de perspectiva y las columnas. (Si est\'an construidas ambas curvas)
\end{itemize}


\subsection{Diagrama de Clases}

\newpage
\begin{itemize}
 \item Vista:
\end{itemize}
\begin{center}
 \includegraphics[width=280pt,height=230pt]{./imagenes/vistas.png}
\end{center}

\begin{itemize}
 \item Modelo:
\end{itemize}
\begin{center}
 \includegraphics[width=280pt,height=230pt]{./imagenes/modelos.png}
\end{center}

\newpage
\begin{itemize}
 \item Controladores:
\end{itemize}
\begin{center}
 \includegraphics[width=260pt,height=160pt]{./imagenes/controlador.png}
\end{center}

\begin{itemize}
 \item Escena:
\end{itemize}
\begin{center}
 \includegraphics[width=200pt,height=100pt]{./imagenes/escena.png}
\end{center}


\end{document}


